//package com.tjetc;
//
//import java.util.Objects;
//
//public class _3GenericType {
//    public static void main(String[] args) {
//        /*
//            泛型的种类：3种 通用化处理 为了提高代码的复用性
//                1.泛型类
//                    class A<T> {}
//                2.泛型接口
//                    interface A<T> {}
//                3.泛型方法
//                    <T> T f(T t) {}
//                   泛型方法和泛型类没有关系
//
//             泛型的参数可以有多个
//         */
//        A<String, String, String, String> a = new A<>();
//        a.a = "a";
//        // 泛型没有默认初始化
//        System.out.println(a.a.getClass());
//
//        // T: Integer R: String
//        D<Integer, String> d = new D();
//        d.f("1");
//        d.f1("1", 1);
//
//
//        E e = new E();
//        int e1 = 1;
//        e.f(e1);
//    }
//}
//
//// <T> ：泛型类型 泛型类
//class A<T, E, R, sdfsfsdfd> {
//    T a;
//    T[] arr;
//
//    // 使用泛型
//    T f(T a) {
//        T b = null;
//        return b;
//    }
//
//    R b;
//    E c;
//    sdfsfsdfd d;
//
////    static void f1(T a){}
//}
//
//
//interface B<T> {
////    T a; 接口的属性都是常量 有static
//
//    void f(T a);
//}
//
//class C<T, R> implements B<T> {
//    @Override
//    public void f(T a) {
//        System.out.println(a.getClass());
//    }
//
//    void f1(T a, R b) {
//        System.out.println(a);
//        System.out.println(b);
//    }
//}
//
///**
//    1.泛型参数没有继承
//    2.泛型的参数传递 如果不传递也就是不写 那么子类或者父类，接口都是Object形式存在
//    3.传递走的参数顺序和定义时的顺序保持一致
// */
//class D<T, R> extends C<R, T> {
//    T a;
//}
//
//
//
//class E {
//    // 泛型方法
//    <T>  void f(int a) {
//        System.out.println(a);
//    }
//
//    static <T> void f1(T a){
//
//    }
//}
//
//
//
//
//
//
//
//
